Page({
  data: {
    phone: '',
    password: '',
    isLoading: false
  },

  onPhoneInput(e) {
    this.setData({ phone: e.detail.value });
  },

  onPasswordInput(e) {
    this.setData({ password: e.detail.value });
  },

  async onLoginTap() {
    const { phone, password } = this.data;
    
    // 表单验证
    if (!phone.trim()) {
      wx.showToast({ title: '请输入手机号', icon: 'none' });
      return;
    }
    
    if (!password.trim()) {
      wx.showToast({ title: '请输入密码', icon: 'none' });
      return;
    }
    
    // 手机号格式验证
    if (!/^1[2-9]\d{9}$/.test(phone)) {
      wx.showToast({ title: '请输入正确的手机号', icon: 'none' });
      return;
    }
    
    // 检查网络连接
    try {
      const networkRes = await new Promise(resolve => {
        wx.getNetworkType({ success: resolve });
      });
      
      console.log('当前网络类型:', networkRes.networkType);
      
      if (networkRes.networkType === 'none') {
        throw new Error('无网络连接');
      }
    } catch (err) {
      console.error('网络检查失败:', err);
      wx.showToast({ title: '请检查网络连接', icon: 'none' });
      return;
    }
    
    this.setData({ isLoading: true });
    
    try {
      console.log('==> 开始登录请求');
      console.log('请求参数:', { phone, password });
      
      
      const res = await this.requestWithRetry(
        'http://localhost:8080/api/userYZ/login',
        {
          method: 'POST',
          data: { phone, password },
          header: { 'content-type': 'application/json' },
          timeout: 10000
        },
        3 
      );
      
      // 打印完整响应信息
      console.log('==> 登录接口完整响应:');
      console.log('响应对象:', res);
      
      // 检查响应对象完整性
      console.log('响应对象结构检查:', {
        hasStatusCode: 'statusCode' in res,
        hasData: 'data' in res,
        hasHeader: 'header' in res
      });
      if (!('statusCode' in res)) {
        throw new Error(`响应结构异常: ${JSON.stringify(res)}`);
      }
      
      if (res.statusCode !== 200) {
        throw new Error(`HTTP错误: ${res.statusCode}`);
      }
      
      console.log('响应数据类型:', typeof res.data);
      
      if (typeof res.data === 'object' && res.data !== null) {
        console.log('响应数据键名:', Object.keys(res.data));
        console.log('响应数据内容:', JSON.stringify(res.data, null, 2));
      } else {
        console.log('响应数据非对象类型:', res.data);
      }
      
      if (!res.data) {
        throw new Error('接口响应格式异常: 缺少data字段');
      }
      
      if (res.data.code === 200) {
        console.log('==> 登录成功，存储用户信息');
        wx.setStorageSync('userInfo', { 
          phone, 
          isLogin: true,
          token: res.data.data?.token || '',
          id: res.data.data?.id,
          name: res.data.data?.name
        });
        
        wx.showToast({ title: '登录成功', icon: 'success' });
        
        setTimeout(() => {
          wx.switchTab({ url: '/pages/first/first' });
        }, 1500);
      } else {
        console.log('==> 登录失败:', res.data.msg);
        wx.showToast({ 
          title: res.data.msg || '登录失败，请重试', 
          icon: 'none' 
        });
      }
    } catch (error) {
      console.error('==> 捕获到异常:');
      console.error('错误类型:', error.constructor.name);
      console.error('错误信息:', error.message);
      console.error('错误堆栈:', error.stack);
      
      let errorMessage = '登录异常，请稍后重试';
      
      if (error.message.includes('无网络连接')) {
        errorMessage = '请检查网络连接';
      } else if (error.message.includes('响应结构异常')) {
        errorMessage = '响应格式异常，请联系开发人员';
      } else if (error.message.includes('HTTP错误')) {
        errorMessage = `服务器错误: ${error.message.replace('HTTP错误: ', '')}`;
      } else if (error.message.includes('timeout')) {
        errorMessage = '请求超时，请重试';
      } else if (error.message.includes('request:fail')) {
        errorMessage = '网络连接失败，请检查网络';
      }
      
      wx.showToast({ 
        title: errorMessage, 
        icon: 'none',
        duration: 3000
      });
    } finally {
      this.setData({ isLoading: false });
    }
  },

  async requestWithRetry(url, options, retries = 3) {
    try {
      const res = await new Promise((resolve, reject) => {
        wx.request({
          url,
          ...options,
          success: (res) => {
            console.log('请求成功回调:', res);
            resolve(res);
          },
          fail: (err) => {
            console.error('请求失败回调:', err);
            reject(err);
          },
          complete: () => {
            console.log('请求完成回调');
          }
        });
      });
      
      return res;
    } catch (error) {
      if (retries > 0) {
        console.log(`请求失败，重试第 ${4 - retries} 次...`);
        return this.requestWithRetry(url, options, retries - 1);
      }
      throw error;
    }
  }
});